
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.clima.view.mbean;

import com.brain.clima.dto.EncuestaDto;
import com.brain.clima.dto.PreguntaDto;
import com.brain.clima.manager.EncuestaManager;
import com.brain.clima.manager.PreguntaManager;
import com.brain.clima.view.util.Comparador;
import com.brain.clima.view.util.ConstantesClima;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.core.view.util.ConstantesCore;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Cmontes
 */
@Controller("resumenEncuestaMBean")
@Scope("session")
public class ResumenEncuestaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(ResumenEncuestaMBean.class);
    @Resource
    private EncuestaManager manager;
    @Resource
    private PreguntaManager preguntaManager;
    /*@Resource
     private EncuestadoManager encuestadoManager;
     @Resource
     private RespuestaManager respuestaManager;*/
    @Resource
    private RecursosManager recursosManager;
    private List<EncuestaDto> lista;
    private EncuestaDto dto;
    private EncuestaDto dtoFiltro;
    private String keyTitulo = "encuesta.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<ParametroDto> listaEstados;
    private List<ParametroDto> listaEstadosFiltro;
    private List<ParametroDto> listaEstadosPregunta;
    private List<ParametroDto> listaTiposPregunta;
    private List<PreguntaDto> listaPreguntaXEncuesta;
    private PreguntaDto pregutaPivotDto;

    public ResumenEncuestaMBean() {
        this.dtoFiltro = new EncuestaDto();
    }

    public String iniciar() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new EncuestaDto();

        return ConstantesClima.UrlNavegacion.URL_LISTA_ENCUESTA_RESUMEN;
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesClima.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        Collections.sort(this.dto.getListaPreguntas(), new Comparador("orden"));

        for (int i = 0; i < this.dto.getListaPreguntas().size(); i++) {
            if (this.dto.getListaPreguntas().get(i).getListaOpcionesResp() != null) {
                Collections.sort(this.dto.getListaPreguntas().get(i).getListaOpcionesResp(), new Comparador("orden"));
            }
        }

        List listaDatos = manager.cargarResultadoEncuesta(this.dto.getId());
        if (listaDatos != null) {
            for (int j = 0; j < listaDatos.size(); j++) {
                //System.out.println(new Long(""+((Object[])listaDatos.get(j))[2]));
                for (int i = 0; i < this.dto.getListaPreguntas().size(); i++) {
                    //System.out.println("encuesta: " +this.dto.getListaPreguntas().get(i).getId());
                    if (this.dto.getListaPreguntas().get(i).getId().equals(new Long("" + ((Object[]) listaDatos.get(j))[2]))) {
                        for (int k = 0; k < this.dto.getListaPreguntas().get(i).getListaOpcionesResp().size(); k++) {
                            //System.out.println("opcion: " +this.dto.getListaPreguntas().get(i).getListaOpcionesResp().get(k).getId());
                            //System.out.println("opcionnnnn " + new Long(""+((Object[])listaDatos.get(j))[1]));
                            if (this.dto.getListaPreguntas().get(i).getListaOpcionesResp().get(k).getId().equals(new Long("" + ((Object[]) listaDatos.get(j))[1]))) {
                                this.dto.getListaPreguntas().get(i).getListaOpcionesResp().get(k).setConsolidada(new Integer("" + ((Object[]) listaDatos.get(j))[0]));
                                //consolidada
                            }
                        }
                    }
                }
            }
        }

        return ConstantesClima.UrlNavegacion.URL_ENCUESTA_RESUMEN;
    }

    public String verResumenCruzado() throws DAOException {
        listaPreguntaXEncuesta = preguntaManager.listPreguntasNoAbiertasPorEncuestaPivot(dto.getId());
        PreguntaDto preguntaTemp = new PreguntaDto();
        preguntaTemp.setId(ConstantesClima.Parametro.PARAMETRO_SELECCIONE);
        preguntaTemp.setDetalle("--Seleccione--");
        listaPreguntaXEncuesta.add(0, preguntaTemp);
        setPregutaPivotDto(preguntaTemp);

        return ConstantesClima.UrlNavegacion.URL_ENCUESTA_RESUMEN_CRUZADA;
    }

    public void cargarResumenCruzado() {

        if (pregutaPivotDto.getId() != null && pregutaPivotDto.getId() != ConstantesClima.Parametro.PARAMETRO_SELECCIONE) {

            for (int i = 0; i < this.dto.getListaPreguntas().size(); i++) {
                if (!this.dto.getListaPreguntas().get(i).getTipoPreguntaDto().getId().equals(ConstantesClima.Parametro.PREGUNTA_TIPO_RESPUESTA_ABIERTA)
                        && !this.dto.getListaPreguntas().get(i).getId().equals(pregutaPivotDto.getId())) {
                    List listaDatos = manager.cargarResultadoEncuestaCruzado(pregutaPivotDto.getId(), this.dto.getListaPreguntas().get(i).getId());
                    CartesianChartModel chartModel = new CartesianChartModel();
                    if (listaDatos == null) {
                        listaDatos = new ArrayList();
                    }
                    for (int k = 0; k < this.dto.getListaPreguntas().get(i).getListaOpcionesResp().size(); k++) {
                        ChartSeries cs = new ChartSeries();
                        cs.setLabel(this.dto.getListaPreguntas().get(i).getListaOpcionesResp().get(k).getDescripcion());

                        for (int m = 0; m < this.pregutaPivotDto.getListaOpcionesResp().size(); m++) {
                            boolean isFound = false;
                            for (int j = 0; j < listaDatos.size(); j++) {
                                if (this.dto.getListaPreguntas().get(i).getListaOpcionesResp().get(k).getId().equals(new Long("" + ((Object[]) listaDatos.get(j))[2]))
                                        && this.pregutaPivotDto.getListaOpcionesResp().get(m).getId().equals(new Long("" + ((Object[]) listaDatos.get(j))[1]))) {
                                    cs.set(this.pregutaPivotDto.getListaOpcionesResp().get(m).getDescripcion(), new Long("" + ((Object[]) listaDatos.get(j))[0]));
                                    isFound = true;
                                    break;
                                }
                            }
                            if (!isFound) {
                                cs.set(this.pregutaPivotDto.getListaOpcionesResp().get(m).getDescripcion(), 0L);
                            }
                        }
                        chartModel.addSeries(cs);
                    }
                    this.dto.getListaPreguntas().get(i).setCartesianChartModel(chartModel);
                }
            }
        } 
//        else {
//            for (int i = 0; i < this.dto.getListaPreguntas().size(); i++) {
//                this.dto.getListaPreguntas().get(i).setCartesianChartModel(new CartesianChartModel());
//            }
//        }
    }

    public void buscar(ActionEvent ae) {
        try {
            this.lista = this.manager.obtenerEncuestas(dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(ConstantesClima.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesClima.UrlNavegacion.URL_LISTA_ENCUESTA_RESUMEN;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ResumenEncuestaMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public EncuestaManager getManager() {
        return manager;
    }

    public void setManager(EncuestaManager manager) {
        this.manager = manager;
    }

    public List<EncuestaDto> getLista() {
        return lista;
    }

    public void setLista(List<EncuestaDto> lista) {
        this.lista = lista;
    }

    public EncuestaDto getDto() {
        return dto;
    }

    public void setDto(EncuestaDto dto) {
        this.dto = dto;
    }

    public EncuestaDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(EncuestaDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public List<ParametroDto> getListaEstadosFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesClima.CatalogoParametro.ESTADO_ENCUESTAS, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstadosFiltro(List<ParametroDto> listaEstadosFiltro) {
        this.listaEstadosFiltro = listaEstadosFiltro;
    }

    public List<ParametroDto> getListaEstadosPregunta() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesClima.CatalogoParametro.ESTADO_PREGUNTAS);
    }

    public void setListaEstadosPregunta(List<ParametroDto> listaEstadosPregunta) {
        this.listaEstadosPregunta = listaEstadosPregunta;
    }

    public List<ParametroDto> getListaTiposPregunta() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesClima.CatalogoParametro.TIPO_PREGUNTAS);
    }

    public void setListaTiposPregunta(List<ParametroDto> listaTiposPregunta) {
        this.listaTiposPregunta = listaTiposPregunta;
    }

    public List<ParametroDto> getListaEstados() {
        //return listaEstados;
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesClima.CatalogoParametro.ESTADO_ENCUESTAS);
    }

    public void setListaEstados(List<ParametroDto> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public List<PreguntaDto> getListaPreguntaXEncuesta() {
        return listaPreguntaXEncuesta;
    }

    public void setListaPreguntaXEncuesta(List<PreguntaDto> listaPreguntaXEncuesta) {
        this.listaPreguntaXEncuesta = listaPreguntaXEncuesta;
    }

    public PreguntaDto getPregutaPivotDto() {
        return pregutaPivotDto;
    }

    public void setPregutaPivotDto(PreguntaDto pregutaPivotDto) {
        this.pregutaPivotDto = pregutaPivotDto;
    }
}
